<?php
defined("IN_FR") || exit();
/*
 * 支付宝插件
 */
class alipay_plugin extends plugin
{

    /**
     * 转向支付页面
     * @param   string  $order_sn   订单号
     * @param   float   $money      支付金额
     * @param   string  $subject    订单名称
     * @param   string  $body       订单说明
     * @param   string  $showUrl    展示URL
     * @return  html
     */
    public function to($order_sn, $money, $subject, $body = "", $showUrl = '')
    {
        //请与贵网站订单系统中的唯一订单号匹配
        $order_sn = empty($order_sn) ? date('Ymdhis') : $order_sn;

        //扩展功能参数——防钓鱼//
        $anti_phishing_key  = '';
        $exter_invoke_ip    = '';
        //自定义参数，可存放任何内容（除=、&等特殊字符外），不会显示在页面上
        $extra_common_param = '';

        //扩展功能参数——分润(若要使用，请按照注释要求的格式赋值)
        $royalty_type       = "";   //提成类型，该值为固定值：10，不需要修改
        $royalty_parameters = "";

        //构造要请求的参数数组
        $parameter = array(
            "service"            => "create_direct_pay_by_user",
            "payment_type"       => "1",
            "partner"            => trim($this->setting['partner']),
            "_input_charset"     => trim(strtolower($this->setting['input_charset'])),
            "seller_email"       => trim($this->setting['seller_email']),
            "return_url"         => trim($this->setting['return_url']),
            "notify_url"         => trim($this->setting['notify_url']),
            "out_trade_no"       => $order_sn,
            "subject"            => $subject,
            "body"               => $body,
            "total_fee"          => floatval($money),
            "paymethod"          => "",
            "defaultbank"        => "",
            "anti_phishing_key"  => $anti_phishing_key,
            "exter_invoke_ip"    => $exter_invoke_ip,
            "show_url"           => $showUrl,
            "extra_common_param" => $extra_common_param,
            "royalty_type"       => $royalty_type,
            "royalty_parameters" => $royalty_parameters
        );
        $alipayService       = $this->load->libPlugin(array("alipay_service", "AlipayService"), "alipay", $this->setting, 1, "lib");
        $html_text = $alipayService->create_direct_pay_by_user($parameter);
        echo $html_text;
    }

    /**
     * 通知页面 异步通知 处理订单数据 对应 $this->setting["notify_url"]
     * @param   array   $notice 通知数据
     *          array(
     *
     *          )
     * @return  false/string    交易状态     *
     * WAIT_BUYER_PAY   交易创建，等待买家付款。
     * TRADE_CLOSED     在指定时间段内未支付时关闭的交易；
     *                  在交易完成全额退款成功时关闭的交易。
     * TRADE_SUCCESS    交易成功，且可对该交易做操作，如：多级分润、退款等。
     * TRADE_PENDING    等待卖家收款 （买家付款后，如果卖家账号被冻结）。
     * TRADE_FINISHED   交易成功且结束，即不可再做任何操作
     */
    public function notify(&$notice = null)
    {
        $alipayNotify = $this->load->libPlugin(array("alipay_notify", "AlipayNotify"), "alipay", $this->setting, 1, "lib");
        //验证是否支付成功
        $verify_result = $alipayNotify->verifyNotify();
        if($verify_result)
        {
            $notice = $this->input->post();
            $status = $notice["trade_status"];
        }
        register_shutdown_function(
                function($status)
                {
                    if($status)
                    {
                        echo "success";
                    }
                    else
                    {
                        echo "fail";
                    }
                }, $status
        );
        return $status;
    }

    /**
     * 返回页面 显示订单信息 对应 $this->setting["return_url"]
     * @param   array   $notice 通知数据
     *          array(
     *
     *          )
     * @return  false/string    交易状态     *
     * WAIT_BUYER_PAY   交易创建，等待买家付款。
     * TRADE_CLOSED     在指定时间段内未支付时关闭的交易；
     *                  在交易完成全额退款成功时关闭的交易。
     * TRADE_SUCCESS    交易成功，且可对该交易做操作，如：多级分润、退款等。
     * TRADE_PENDING    等待卖家收款 （买家付款后，如果卖家账号被冻结）。
     * TRADE_FINISHED   交易成功且结束，即不可再做任何操作
     */
    public function back(&$notice = null)
    {
        $alipayNotify = $this->load->libPlugin(array("alipay_notify", "AlipayNotify"), "alipay", $this->setting, 1, "lib");
        //验证是否支付成功
        $verify_result = $alipayNotify->verifyReturn();
        if($verify_result)
        {
            $notice = $this->input->get();
            $status = $notice["trade_status"];
        }
        return $status;
    }

    public function returnNotify($status)
    {
        if($status)
        {
            echo "success";
        }
        else
        {
            echo "fail";
        }
    }

}
?>